package com.yitong.equipment.ui.qrCode

import android.content.Intent
import android.content.pm.ActivityInfo
import android.os.Bundle
import android.text.TextUtils
import android.view.View
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import com.blankj.utilcode.util.BarUtils
import com.blankj.utilcode.util.ToastUtils
import com.gyf.immersionbar.ImmersionBar
import com.king.zxing.CaptureActivity
import com.king.zxing.DecodeFormatManager
import com.king.zxing.util.CodeUtils
import com.luck.picture.lib.PictureSelector
import com.luck.picture.lib.animators.AnimationType
import com.luck.picture.lib.config.PictureConfig
import com.luck.picture.lib.config.PictureMimeType
import com.luck.picture.lib.style.PictureSelectorUIStyle
import com.luck.picture.lib.style.PictureWindowAnimationStyle
import com.luck.picture.lib.tools.SdkVersionUtils
import com.yitong.equipment.view.GlideEngine
import com.yitong.equipment.R

class QRScanActivity : CaptureActivity(), View.OnClickListener {

    var btnBack: ImageView? = null
    var tvBack: TextView? = null
    var tvPhoto: TextView? = null
    var ivTorch: ImageView? = null
    var titleTop: LinearLayout? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        ImmersionBar.with(this).init()

        captureHelper
            .decodeFormats(DecodeFormatManager.QR_CODE_FORMATS) //设置只识别二维码会提升速度
            .playBeep(false)
            .vibrate(false)
            .continuousScan(true) //是否连扫
            .supportLuminanceInvert(true) //是否支持识别反色码（黑白反色的码），增加识别率;

        btnBack = findViewById(R.id.btn_back)
        tvBack = findViewById(R.id.tv_back)
        tvPhoto = findViewById(R.id.tv_photo)
        ivTorch = findViewById(R.id.ivTorch)
        titleTop = findViewById(R.id.title_top)

        titleTop?.setPadding(0, BarUtils.getStatusBarHeight(), 0, 0)

        btnBack?.setOnClickListener(this)
        tvBack?.setOnClickListener(this)
        tvPhoto?.setOnClickListener(this)
    }

    override fun getLayoutId(): Int {
        return R.layout.activity_qrcode
    }

    override fun onClick(v: View?) {
        when (v?.id) {
            R.id.btn_back -> {
                finish()
            }
            R.id.tv_back -> {
                finish()
            }
            R.id.tv_photo -> {
                // 进入相册
                PictureSelector.create(this@QRScanActivity)
                    .openGallery(PictureMimeType.ofImage()) // 全部.PictureMimeType.ofAll()、图片.ofImage()、视频.ofVideo()、音频.ofAudio()
                    .imageEngine(GlideEngine().createGlideEngine()) // 外部传入图片加载引擎，必传项
                    .setPictureUIStyle(PictureSelectorUIStyle.ofDefaultStyle())
                    .setPictureWindowAnimationStyle(PictureWindowAnimationStyle.ofDefaultWindowAnimationStyle()) // 自定义相册启动退出动画
                    .isWeChatStyle(true) // 是否开启微信图片选择风格
                    .isUseCustomCamera(false) // 是否使用自定义相机
                    .isPageStrategy(true) // 是否开启分页策略 & 每页多少条；默认开启
                    .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION) // 列表动画效果
                    .isWithVideoImage(true) // 图片和视频是否可以同选,只在ofAll模式下有效
                    .isMaxSelectEnabledMask(true) // 选择数到了最大阀值列表是否启用蒙层效果
                    .maxSelectNum(1) // 最大图片选择数量
                    .minSelectNum(1) // 最小选择数量
                    .maxVideoSelectNum(0) // 视频最大选择数量
                    .imageSpanCount(4) // 每行显示个数
                    .isReturnEmpty(false) // 未选择数据时点击按钮是否可以返回
                    .closeAndroidQChangeWH(true) //如果图片有旋转角度则对换宽高,默认为true
                    .closeAndroidQChangeVideoWH(!SdkVersionUtils.checkedAndroid_Q()) // 如果视频有旋转角度则对换宽高,默认为false
                    .setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) // 设置相册Activity方向，不设置默认使用系统
                    .isOriginalImageControl(false) // 是否显示原图控制按钮，如果设置为true则用户可以自由选择是否使用原图，压缩、裁剪功能将会失效
                    .selectionMode(PictureConfig.SINGLE) // 多选 or 单选
                    .isSingleDirectReturn(true) // 单选模式下是否直接返回，PictureConfig.SINGLE模式下有效
                    .isPreviewImage(false) // 是否可预览图片
                    .isPreviewVideo(false) // 是否可预览视频
                    .isEnablePreviewAudio(false) // 是否可播放音频
                    .isCamera(false) // 是否显示拍照按钮
                    .isZoomAnim(true) // 图片列表点击 缩放效果 默认true
                    .isEnableCrop(false) // 是否裁剪
                    .isCompress(true) // 是否压缩
                    .synOrAsy(false) //同步true或异步false 压缩 默认同步
                    .withAspectRatio(1, 1) // 裁剪比例 如16:9 3:2 3:4 1:1 可自定义
                    .hideBottomControls(true) // 是否显示uCrop工具栏，默认不显示
                    .isGif(false) // 是否显示gif图片
                    .glideOverride(120, 120)
                    .compressQuality(50)
                    .freeStyleCropEnabled(true) // 裁剪框是否可拖拽
                    .circleDimmedLayer(false) // 是否圆形裁剪
                    .showCropFrame(true) // 是否显示裁剪矩形边框 圆形裁剪时建议设为false
                    .showCropGrid(true) // 是否显示裁剪矩形网格 圆形裁剪时建议设为false
                    .isOpenClickSound(true) // 是否开启点击声音
                    .isDragFrame(false) // 是否可拖动裁剪框(固定)
                    .cutOutQuality(50) // 裁剪输出质量 默认100
                    .minimumCompressSize(100) // 小于多少kb的图片不压缩
                    .rotateEnabled(true) // 裁剪是否可旋转图片
                    .scaleEnabled(true) // 裁剪是否可放大缩小图片
                    .forResult(PictureConfig.CHOOSE_REQUEST) //结果回调onActivityResult code
            }


        }
    }

    override fun onResultCallback(result: String): Boolean {
        checkScheme(result)
        return true
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode == RESULT_OK) {
            if (requestCode == PictureConfig.CHOOSE_REQUEST || requestCode == PictureConfig.REQUEST_CAMERA) { // 图片选择结果回调
                val selectList = PictureSelector.obtainMultipleResult(data)
                selectList?.let {
                    //异步解析
                    asyncThread(Runnable {
                        val result: String = CodeUtils.parseCode(selectList[0].compressPath)
                        runOnUiThread {
                            checkScheme(result)
                        }
                    })
                }
            }
        }
    }

    private fun checkScheme(result: String) {
        if (TextUtils.isEmpty(result)) {
            ToastUtils.showShort("未发现二维码")
        } else {
            ToastUtils.showShort(result)
        }
    }

    private fun asyncThread(runnable: Runnable) {
        Thread(runnable).start()
    }

}